module.exports = function (grunt) {
    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        coffee: {
            lib: {
                options: {bare: false},
                files: {
                    'morris.js': ['build/morris.coffee']
                }
            },
            spec: {
                options: {bare: true},
                files: {
                    'build/spec.js': ['build/spec.coffee']
                }
            },
        },
        concat: {
            'build/morris.coffee': {
                options: {
                    banner: "### @license\n" +
                    "<%= pkg.name %> v<%= pkg.version %>\n" +
                    "Copyright <%= (new Date()).getFullYear() %> <%= pkg.author.name %> All rights reserved.\n" +
                    "Licensed under the <%= pkg.license %> License.\n" +
                    "###\n",
                },
                src: [
                    'lib/morris.coffee',
                    'lib/morris.grid.coffee',
                    'lib/morris.hover.coffee',
                    'lib/morris.line.coffee',
                    'lib/morris.area.coffee',
                    'lib/morris.bar.coffee',
                    'lib/morris.donut.coffee'
                ],
                dest: 'build/morris.coffee'
            },
            'build/spec.coffee': ['spec/support/**/*.coffee', 'spec/lib/**/*.coffee']
        },
        less: {
            all: {
                src: 'less/*.less',
                dest: 'morris.css',
                options: {
                    compress: true
                }
            }
        },
        uglify: {
            build: {
                options: {
                    preserveComments: 'some'
                },
                files: {
                    'morris.min.js': 'morris.js'
                }
            }
        },
        mocha: {
            index: ['spec/specs.html'],
            options: {run: true}
        },
        watch: {
            all: {
                files: ['lib/**/*.coffee', 'spec/lib/**/*.coffee', 'spec/support/**/*.coffee', 'less/**/*.less'],
                tasks: 'default'
            },
            dev: {
                files: 'lib/*.coffee',
                tasks: ['concat:build/morris.coffee', 'coffee:lib']
            }
        },
        shell: {
            visual_spec: {
                command: './run.sh',
                options: {
                    stdout: true,
                    failOnError: true,
                    execOptions: {
                        cwd: 'spec/viz'
                    }
                }
            }
        }
    });

    grunt.registerTask('default', ['concat', 'coffee', 'less', 'uglify', 'mocha', 'shell:visual_spec']);
};
